Skip to content

feat(rockchip-rga): add dry-run command buffer - #1248

Merged
ZR233 merged 2 commits into
rcore-os:devfrom
Utopia-V:feat/rockchip-rga-dry-run
Jun 15, 2026
Merged

feat(rockchip-rga): add dry-run command buffer#1248
ZR233 merged 2 commits into
rcore-os:devfrom
Utopia-V:feat/rockchip-rga-dry-run

Conversation

@Utopia-V

Copy link
Copy Markdown
Contributor

Summary

  • 新增 rockchip-rga no_std 驱动基础 crate,先覆盖 RGA core/resource 描述、最小寄存器表和版本寄存器读取。
  • 增加 dry-run command buffer 编码层,用单元测试验证 copy / fill 的最小字段编码逻辑。
  • ax-driver 中接入 rga feature 和 FDT probe glue,为后续 RK3588 实板上的 RGA bring-up 留出入口。

Commits

  • feat(rockchip-rga): add dry-run command buffer

What's included

  • drivers/gpu/rockchip-rga
    • 新增 RockchipRga / RgaCore / RgaCoreResource 基础类型。
    • 新增 RGA 最小 register offset 常量。
    • 新增 read_version_info(),用于后续实板读取 RGA_VERSION_INFO
    • 新增 copy / fill dry-run command buffer encoder。
    • 新增 command buffer 字段编码和非法参数单元测试。
  • drivers/ax-driver
    • 新增 rga feature。
    • 匹配当前 DTS 中的 rockchip,rga3_core0 / rockchip,rga3_core1 / rockchip,rga2_core0
    • 从 FDT 解析 reg / IRQ,完成 MMIO 映射和 DMA capability 绑定。
  • workspace
    • 新增 drivers/gpu/* workspace member。
    • 新增 rockchip-rga workspace dependency。

What's NOT included (deferred)

  • 真实 RGA 硬件提交路径:尚未写 RGA_CMD_BASE / RGA_CMD_CTRL 启动硬件。
  • 真实 DMA image buffer、command buffer 分配与 cache flush / invalidate。
  • IRQ completion / polling completion 路径。
  • resize / rotate / format convert。
  • /dev/rga、librga、V4L2 或 DRM 用户态接口兼容。
  • RK3588 实板验证。

Changed files

  • Cargo.toml
  • Cargo.lock
  • drivers/ax-driver/Cargo.toml
  • drivers/ax-driver/src/lib.rs
  • drivers/ax-driver/src/rga.rs
  • drivers/gpu/rockchip-rga/Cargo.toml
  • drivers/gpu/rockchip-rga/src/lib.rs
  • drivers/gpu/rockchip-rga/src/registers.rs
  • drivers/gpu/rockchip-rga/src/command.rs

Testing

  • cargo fmt --all
  • cargo test -p rockchip-rga
  • cargo xtask clippy --package rockchip-rga
  • cargo clippy -p ax-driver --no-default-features --features rga -- -D warnings
  • cargo xtask clippy --package ax-driver
  • git diff --check

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review 总结

本 PR 新增 rockchip-rga no_std 驱动 crate,覆盖 RGA core 基础类型、最小寄存器表、版本读取、dry-run command buffer 编码层(copy/fill),并在 ax-driver 中接入 rga feature 和 FDT probe glue。代码质量良好,结构清晰。

代码分析

drivers/gpu/rockchip-rga/src/lib.rs

  • RgaCoreConfig/RgaCoreResource/RgaCore/RockchipRga 层次分明,与 rockchip-npu crate 的 RknpuCore/Rknpu 模式一致。
  • unsafe impl Send for RgaCore 合理:MMIO base 指针由平台 glue 保证有效性,read32 正确使用 read_volatile
  • DriverGeneric 实现最小可用,后续可扩展。

drivers/gpu/rockchip-rga/src/registers.rs

  • 寄存器偏移常量与 RGA2/RGA3 技术参考一致,CMD_BUFFER_WORDS=0x20(32字)匹配 old RGA command block 格式。

drivers/gpu/rockchip-rga/src/command.rs

  • dry-run command buffer 编码逻辑完整:validate → encode → 测试覆盖。
  • encode_mode/encode_src_info/encode_src_vir_info/encode_dst_vir_info/encode_src_act_info/encode_dst_act_info 字段宽度和位域掩码与 RGA 硬件手册匹配(src active info 13 位、dst active info 12 位、src vir info 含 UV stride 10 位字段)。
  • descriptor_base_word() 正确检查 16 字节对齐和 32 位溢出。
  • 5 个单元测试覆盖正常 copy/fill 编码和非法参数拒绝(未对齐地址、stride 过小、尺寸不匹配)。

drivers/ax-driver/src/rga.rs

  • FDT probe glue 与 rknpu.rs 模式一致:model_register! 宏、page_aligned_region 对齐、iomapRgaCoreResource 构建 → RockchipRga::newplat_dev.register
  • detect_core_config 正确映射 rga3_core0/rga3_core1/rga2_core0 compatible 字符串。
  • decode_fdt_irq 正确处理 GIC 中断类型(SPI +32、PPI +16)。
  • DMA mask 使用 u32::MAX as u64 与 NPU 驱动一致。

验证结果

  • cargo fmt --check ✅ 通过
  • cargo clippy --manifest-path drivers/gpu/rockchip-rga/Cargo.toml --all-features -- -D warnings ✅ 无警告
  • cargo test --manifest-path drivers/gpu/rockchip-rga/Cargo.toml --all-features ✅ 5/5 通过
  • cargo clippy --manifest-path drivers/ax-driver/Cargo.toml --all-features -- -D warnings ✅ 无警告

CI 状态

所有 GitHub Actions check runs 状态为 skipped(fork PR 需要 approval 触发 CI),无失败。

相关 PR

无重叠或冲突的开放 PR。#1189(NPU bench)已关闭,在后续描述中提到需要 RGA 支持图像预处理。

遗留项(非阻塞,已由作者在 PR body 中声明 deferred)

  • 真实硬件提交路径(RGA_CMD_BASE/RGA_CMD_CTRL)
  • DMA image buffer 分配与 cache sync
  • IRQ/polling completion
  • resize/rotate/format convert
  • 用户态接口(/dev/rga、librga、V4L2/DRM)
  • RK3588 实板验证

结论

代码结构良好,遵循项目既有模式(与 rockchip-npu 对齐),测试充分,验证通过。deferred 项不影响当前 dry-run bring-up 目标。建议合并。

Powered by mimo-v2.5-pro

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本次审查通过。

PR 新增 drivers/gpu/rockchip-rga 作为 no_std RGA 基础驱动 crate,并在 ax-driver 中增加 rga feature 与 FDT probe glue。可复用 crate 只依赖 dma-api / rdif-base,FDT、iomap、DMA capability 绑定保留在 ax-driver glue 层,符合当前驱动分层方向。dry-run command buffer 的寄存器偏移、32-word mode block、MMU descriptor 地址右移 4 位、active/virtual info 字段布局与 Linux RGA 旧 command-buffer 路径一致;当前只覆盖 copy/fill dry-run,真实硬件提交、cache sync、IRQ/polling、用户态接口和 RK3588 实板验证已在 PR body 中明确 deferred,不影响这一步的合入目标。

重复/重叠检查:在 origin/dev 中只找到 RK3588 DTS/power-domain 里的 RGA 节点和 rockchip-pm 域信息,没有已有 rockchip-rga crate 或等价 command-buffer 实现;相关 open PR 主要是 #1185#1160 这类相邻驱动/显示/平台改动,没有重复实现 RGA dry-run encoder。未发现 [patch.crates-io]

冲突处理:原 head 976943e8f4f6bcccfab2b51d17faa62026afca64 与当前 dev 冲突,且 maintainer edits 已开启。我单独创建 conflict worktree,将当前 dev merge 到作者分支并推送了普通非 force 更新 25a315c19646e7d4cb30349f4ebc320f66b40d0e。冲突文件为 Cargo.toml,解决逻辑是保留当前 dev 的版本提升和新增 release/kmod 变更,同时保留本 PR 的 drivers/gpu/* workspace member 与 rockchip-rga = { version = "0.1.0", path = "drivers/gpu/rockchip-rga" } workspace dependency;Cargo.lock 通过 Cargo metadata 重新校验解析,没有手工拼锁文件。

验证结果:

  • 原 PR head:cargo fmt --all --check 通过;cargo test -p rockchip-rga 通过,5 个测试全过;cargo xtask clippy --package rockchip-rga 通过;cargo clippy -p ax-driver --no-default-features --features rga -- -D warnings 通过;git diff --check origin/dev...HEAD 通过;metadata 确认 rockchip-rga / dma-api / rdif-base 均为 workspace path crate。
  • merge repair 后的 conflict worktree:cargo fmt --all --checkcargo test -p rockchip-rgacargo xtask clippy --package rockchip-rgacargo clippy -p ax-driver --no-default-features --features rga -- -D warningsgit diff --check、conflict-marker scan 均通过。
  • 推送后的当前 PR head 25a315c19646e7d4cb30349f4ebc320f66b40d0e:再次执行 cargo fmt --all --checkcargo test -p rockchip-rgacargo xtask clippy --package rockchip-rgacargo clippy -p ax-driver --no-default-features --features rga -- -D warningsgit diff --check origin/dev...HEAD、conflict-marker scan、metadata 检查,均通过。

CI 状态:推送 conflict repair 后新一轮 CI 已启动;审查提交前看到 Detect changed pathsRun sync-lint / run_container 通过,Check formatting / run_host 仍 pending,其它 container/host 互斥或发布类任务为预期 skipped。当前合入前仍应等 required CI 完成。

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查总结

本 PR 新增 rockchip-rga no_std 驱动基础 crate(dry-run command buffer),并在 ax-driver 中通过 rga feature 接入 FDT probe glue。代码结构良好,遵循项目既有模式(与 rockchip-npu 对齐),测试充分。

实现分析

drivers/gpu/rockchip-rga/src/lib.rs

  • RgaCoreConfig/RgaCoreResource/RgaCore/RockchipRga 层次分明,与 rockchip-npu crate 的 RknpuCore/Rknpu 模式一致。
  • unsafe impl Send for RgaCore 合理:MMIO base 指针由平台 glue 保证有效性,read32 正确使用 read_volatile
  • DriverGeneric 实现最小可用,后续可扩展。

drivers/gpu/rockchip-rga/src/registers.rs

  • 寄存器偏移常量与 RGA2/RGA3 技术参考一致,CMD_BUFFER_WORDS=0x20(32字)匹配 old RGA command block 格式。

drivers/gpu/rockchip-rga/src/command.rs

  • dry-run command buffer 编码逻辑完整:validate → encode → 测试覆盖。
  • encode_mode/encode_src_info/encode_src_vir_info/encode_dst_vir_info/encode_src_act_info/encode_dst_act_info 字段宽度和位域掩码与 RGA 硬件手册匹配(src active info 13 位、dst active info 12 位、src vir info 含 UV stride 10 位字段)。
  • descriptor_base_word() 正确检查 16 字节对齐和 32 位溢出。
  • 5 个单元测试覆盖正常 copy/fill 编码和非法参数拒绝(未对齐地址、stride 过小、尺寸不匹配)。

drivers/ax-driver/src/rga.rs

  • FDT probe glue 与 rknpu.rs 模式一致:model_register! 宏、page_aligned_region 对齐、iomapRgaCoreResource 构建 → RockchipRga::newplat_dev.register
  • detect_core_config 正确映射 rga3_core0/rga3_core1/rga2_core0 compatible 字符串。
  • decode_fdt_irq 正确处理 GIC 中断类型(SPI +32、PPI +16)。
  • DMA mask 使用 u32::MAX as u64 与 NPU 驱动一致。

本地验证结果

  • cargo fmt --check ✅ 通过
  • cargo clippy -p rockchip-rga --all-features -- -D warnings ✅ 无警告
  • cargo test -p rockchip-rga ✅ 5/5 通过
  • git diff --check ✅ 通过
  • [patch.crates-io] 检查:无 crates.io patch ✅

CI 状态

  • Check formatting / run_host ✅ success
  • Run sync-lint / run_container ✅ success
  • 所有 QEMU 测试(arceos/starry aarch64/riscv64/loongarch64/x86_64)✅ success
  • Test axvisor self-hosted x86_64 / run_host ❌ failure(与本 PR 无关:该测试运行在 s1lqc-rcore-os-runner-7 自托管 runner 上,dev 分支最新 push c5f6d615 同一 check 也失败,属于基础设施/基线已知问题,与 rockchip-rga Arm GPU 驱动无关)
  • Test starry x86_64 qemu / run_container cancelled、Run clippy / run_host cancelled(被 Cancel stale CI runs 机制取消,属预期行为)
  • 已跳过的 check(host/container 互斥矩阵、分支限制发布 job)均为预期行为

重复/重叠分析

  • origin/dev 基线中只有 RK3588 DTS/power-domain 里的 RGA 节点和 rockchip-pm 域信息,没有已有 rockchip-rga crate 或等价 command-buffer 实现。
  • 开放 PR 中无与 RGA、GPU 驱动、command buffer encoder 重叠的 PR。#1185#1160 等为相邻驱动/显示/平台改动,但不涉及 RGA dry-run encoder。
  • [patch.crates-io]

冲突处理

原始 head 与 dev 有冲突,ZR233 已在前一次审查中单独创建 conflict worktree 解决了 Cargo.toml 冲突(保留当前 dev 的版本提升和新增变更,同时保留本 PR 的 drivers/gpu/* workspace member 和 rockchip-rga dependency),并推送了非 force 更新 25a315c19。修复后验证通过。

审查线程

无未解决的 review thread。

遗留项(非阻塞,作者已在 PR body 中声明 deferred)

  • 真实硬件提交路径(RGA_CMD_BASE/RGA_CMD_CTRL)
  • DMA image buffer 分配与 cache sync
  • IRQ/polling completion
  • resize/rotate/format convert
  • 用户态接口(/dev/rga、librga、V4L2/DRM)
  • RK3588 实板验证

结论

代码结构良好,遵循项目既有模式,测试充分,验证通过。唯一 CI 失败与本 PR 无关(基线基础设施问题)。deferred 项不影响当前 dry-run bring-up 目标。无阻塞问题,建议合并。

Powered by mimo-v2.5-pro

@mai-team-app
mai-team-app Bot requested a review from elliott10 June 15, 2026 03:05
@ZR233
ZR233 merged commit 3cc9351 into rcore-os:dev Jun 15, 2026
94 of 100 checks passed
@github-actions github-actions Bot mentioned this pull request Jun 15, 2026
fzg-23 pushed a commit to fzg-23/tgoskits that referenced this pull request Jun 16, 2026
Co-authored-by: 周睿 <zrufo747@outlook.com>
@github-actions github-actions Bot mentioned this pull request Jun 22, 2026
luodeb pushed a commit that referenced this pull request Jun 30, 2026
Co-authored-by: 周睿 <zrufo747@outlook.com>
aptacc2421 pushed a commit to aptacc2421/tgoskits that referenced this pull request Jul 30, 2026
Co-authored-by: 周睿 <zrufo747@outlook.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants